package com.feri.gpstudy.service.impl;

import cn.hutool.crypto.SecureUtil;
import com.feri.gpstudy.bo.LoginBo;
import com.feri.gpstudy.bo.UserAddBo;
import com.feri.gpstudy.bo.UserWhereBo;
import com.feri.gpstudy.entity.User;
import com.feri.gpstudy.dao.UserDao;
import com.feri.gpstudy.service.intf.UserService;
import com.feri.gpstudy.vo.R;
import javax.annotation.Resource;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.Base64;

/**
 * 千锋郑州Java学科欢迎你
 * @program: GpStudy
 * @description: 业务接口实现层
 * @author: Feri
 * @create: 2023-04-21 09:59:58
 */
@Service
public class UserServiceImpl implements UserService{
    /**
    *注入持久层对象*/
    @Resource
    private UserDao dao;
    /**
     * 密码的密钥*/
    public static final String KEY="c//m3tjXyeufvHm5H3f/zA==";

    /**
    * 新增内容*/
    @Override
    public R save(UserAddBo bo) {
        //1.查询 用户名是否存在
        if(dao.selectByName(bo.getUsername())==null){
            //用户名唯一
            //2.组装对象
            User user=new User();
            BeanUtils.copyProperties(bo,user);
            //3.密码 明文变 密文
            user.setPassword(SecureUtil.aes(Base64.getDecoder().decode(KEY)).encryptBase64(bo.getPassword()));
            //4.操作数据库
            if(dao.insert(user)>0){
                return R.ok();
            }
        }
        return R.fail("亲，新增异常！");
    }
    /**
    * 修改内容*/
    @Override
    public R update(User user) {
        if(user !=null) {
            int i = 0;
            i = dao.update(user);
            if (i > 0) {
                return R.ok();
            }
        }
        return R.fail("亲，修改异常！");
    }
    /**
     *删除 */
    @Override
    public R del(long id){

        if(id>0){
            int i=dao.del(id);
            if(i>0){
                return R.ok();
            }
        }
        return R.fail("删除异常");
    }

    /**
     * 查询详情*/
    @Override
    public R queryById(long id){
        return R.ok(dao.selectById(id));
    }

    /**
     * 查询 所有数据*/
    @Override
    public R queryAll(UserWhereBo bo) {
        PageHelper.startPage(bo.getPage(),bo.getSize());
        PageInfo<User> pageInfo=new PageInfo<>(dao.selectAll(bo.getUsername(),bo.getRealname(),bo.getRole()));
        return R.ok(pageInfo);
    }

    @Override
    public R login(LoginBo bo) {
        //1.查询
        User user=dao.selectByName(bo.getName());
        if(user!=null){
            System.out.println(SecureUtil.aes(Base64.getDecoder().decode(KEY)).encryptBase64(bo.getPass()));
            //2.密码 密文比对
            if(user.getPassword().equals(SecureUtil.aes(Base64.getDecoder().decode(KEY)).encryptBase64(bo.getPass()))){
                //登录成功
                //令牌 登录成功的标识
                String token=user.getId()+"";
                return R.ok(token);
            }
        }
        return R.fail("亲，用户名或密码错误！");
    }
}
